package com.lsj.spring.service.impl;

import com.lsj.spring.mapper.UserMapper;
import com.lsj.spring.model.User;
import com.lsj.spring.service.IUserService;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import java.util.List;

/**
 * @author Lsj
 * @version 1.0
 * @date 2021/6/23 13:22
 * 这个类需要放在spring容器中管理
 * 默认名字是类名首字母转小写 如果需要指定名字 可以在后面括号中加上名字
 * Service是spring为区分controller service dao设计的
 */
@NoArgsConstructor
@Service("userService")
@Scope(value = "singleton")
public class UserServiceImpl implements IUserService {

    /**
     * 交给容器进行管理
     * 由spring容器注入进来
     * autowired是自动注入的注解
     * 注入规则
     * 会根据类型进行匹配
     * 匹配到多个 根据名字匹配
     * 当有qualifier的时候会根据其括号中的名字进行匹配
     * resource先根据名字进行匹配然后根据type进行匹配 相当于前两者的和
     * 也可以通过name指定要注入的依赖
     * 反射机制进行注入
     */

    @PostConstruct
    public void initBean() {
        // 希望在容器初始化的时候做事情
        System.out.println("初始化容器");
        // 初始化完成
    }

    @Autowired
    private UserMapper userMapper;

    @PreDestroy
    public void beanDestroy() {
        System.out.println("容器已经被销毁");
    }

    @Override
    public List<User> select() {
        List<User> list = userMapper.select();
        return list;
    }
}
